﻿/*----------------------------------------------------------------
// Copyright (C) 2023 版权所有。 
//
// 文件功能描述：   系统配置管理
// 文件创建者：     王志国
// 时间：           2023 年 7 月 12 日
// 
// 修改履历：
// 时间         作者       修改内容                   修改原因
// 2023/7/12   王志国      新建
//----------------------------------------------------------------*/
using Goway.Log4net;
using Goway.StackingUC.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Goway.IniConifigHelper
{
    /// <summary>
    /// 配置管理
    /// </summary>
    public class SysConfigManager : Singleton<SysConfigManager>
    {
        /// <summary>
        /// 每列的库位数
        /// </summary>
        public int ColumnSpaceCount { get; private set; }

        /// <summary>
        /// 每包物料数
        /// </summary>
        public int MaterialCountPeerPackage { get; private set; }

        /// <summary>
        /// 临时区每列库位数
        /// </summary>
        public int TempColumnSpaceCount { get; private set; }

        /// <summary>
        /// 分流扫描时间间隔，单位：ms
        /// </summary>
        public int ShuntScanInteval { get; private set; }

        /// <summary>
        /// 入库扫描时间间隔，单位：ms
        /// </summary>
        public int InputScanInteval { get; private set; }

        /// <summary>
        /// 入库 Buffer 所在列号
        /// </summary>
        public int InputAtColumnIdx { get; private set; }

        /// <summary>
        /// 入库 Buffer 开始层号
        /// </summary>
        public int InputBeginLayerIdx { get; private set; }

        /// <summary>
        /// 入库 Buffer 结束层号
        /// </summary>
        public int InputEndLayerIdx { get; private set; }

        /// <summary>
        /// 出库 Buffer 所在列号
        /// </summary>
        public int OutputAtColumnIdx { get; private set; }

        /// <summary>
        /// 出库 Buffer 开始层号
        /// </summary>
        public int OutputBeginLayerIdx { get; private set; }

        /// <summary>
        /// 出库 Buffer 结束层号
        /// </summary>

        /// <summary>
        /// 构造，读取文件，获得所有配置项
        /// </summary>
        public SysConfigManager()
        {
            IniFileReadWite iniRW = new IniFileReadWite(@".\Config\config.ini");

            try
            {
                // 初始化各参数
                string valueStr = iniRW.ReadIniValue("SystemConfig", "ColumnSpaceCount");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out int valueInt))
                {
                    this.ColumnSpaceCount = valueInt;
                }

                valueStr = iniRW.ReadIniValue("SystemConfig", "MaterialCountPeerPackage");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.MaterialCountPeerPackage = valueInt;
                }

                valueStr = iniRW.ReadIniValue("SystemConfig", "ShuntScanInteval");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.ShuntScanInteval = valueInt;
                }

                valueStr = iniRW.ReadIniValue("SystemConfig", "TempColumnSpaceCount");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.TempColumnSpaceCount = valueInt;
                }

                valueStr = iniRW.ReadIniValue("SystemConfig", "InputScanInteval");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.InputScanInteval = valueInt;
                }

                #region 出入库缓存坐标位置

                valueStr = iniRW.ReadIniValue("InputBuffer", "AtColumnIndex");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.InputScanInteval = valueInt;
                }

                valueStr = iniRW.ReadIniValue("InputBuffer", "BeginLevelIndex");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.InputScanInteval = valueInt;
                }

                valueStr = iniRW.ReadIniValue("InputBuffer", "EndLevelIndex");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.InputScanInteval = valueInt;
                }

                valueStr = iniRW.ReadIniValue("OutputBuffer", "AtColumnIndex");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.InputScanInteval = valueInt;
                }

                valueStr = iniRW.ReadIniValue("OutputBuffer", "BeginLevelIndex");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.InputScanInteval = valueInt;
                }

                valueStr = iniRW.ReadIniValue("OutputBuffer", "EndLevelIndex");
                if (!string.IsNullOrEmpty(valueStr) && int.TryParse(valueStr, out valueInt))
                {
                    this.InputScanInteval = valueInt;
                }

                #endregion
            }
            catch (Exception ex)
            {
                LoggerHelper.Error($"读取配置文件出错：{ex.Message}");
            }
        }
    }
}
